package 网络编程2套接字.UDP数据报套接字编程;
//对于UDP协议来说，具有无连接，面向数据报的特征，即每次都是没有建立连接，并且一次发送全部数
//据报，一次接收全部的数据报。
//java中使用UDP协议通信，主要基于 DatagramSocket 类来创建数据报套接字，并使用
//DatagramPacket 作为发送或接收的UDP数据报。对于一次发送及接收UDP数据报的流程如下：
//--
/**
 * 数据报套接字：使用传输层UDP协议
 * UDP，即User Datagram Protocol（用户数据报协议），传输层协议。
 * 以下为UDP的特点（细节后续再学习）：
 * 无连接
 * 不可靠传输
 * 面向数据报
 * 有接收缓冲区，无发送缓冲区
 * 大小受限：一次最多传输64k
 * 对于数据报来说，可以简单的理解为，传输数据是一块一块的，发送一块数据假如100个字节，必须一
 * 次发送，接收也必须一次接收100个字节，而不能分100次，每次接收1个字节。
 */
//UDP socket有两个核心的类:
//    1.DatagramSocket 创建一个socket对象 -> 这个Java标准库中的DatagramSocket对象其实也就是表示一个socket文件
/**
 *     receive 接收数据,如果没有数据过来
 *     receive就会阻塞等待
 *     如果有数据了,receive就能返回一分DatagramPacket对象
 *
 *     send 发送数据
 *          以DatagramPacket对象为单位进行的
 */


//    2.DatagramPacket 描述一个UDP数据报.
//面向数据报~
//发送/接受数据,就是以DatagramPacket对象为单位的.

/**
 * 发送的时候,需要知道发送的目标在哪.
 *  接受的时候,也需要知道这个数据从哪来
 * ip地址+端口号
 * InetSocketAddress类来表示
 */
//--------------------------
/**
 * 操作系统提供的网络编程API叫做socket API
 * socket API中涉及到一个核心概念socket.
 * socket本质是一个文件描述符
 *
 * 文件描述符:
 * 某个进程被创建出来,进程就会对应一个PCB.PCB中就包含了一个文件描述符表.
 * 每次打开一个文件,就会在文件描述符表中分配一个表项
 * 文件描述符表类似于一个数组.数组的下标就是文件描述符.数组的元素是一个内核结构struct file(C语言中的结构体,Linux内核本身就是C语言写的.)
 *
 * 一切皆文件~
 * 操作系统在管理硬件设备和一些软件资源的时候,
 * 为了能够风格统一,于是就都是用文件的方式来管理.
 *
 * 普通文件
 * 键盘 => 标准输入文件
 * 显示器 => 标准输出文件
 *
 * 网卡也是一个硬件设备,操作系统也是用文件来管理网卡.
 * 此处来表示网卡设备的文件,也就是socket文件
 *
 * 要想操作网卡,就需要先创建出socket文件,通过读写这个socket文件(相当于遥控器)的方式来操作网卡(相当于电视机)了.
 *
 */
public class TestDemo3 {
}
